//
// Created by Hello on 2024/2/4.
//
// 125 验证回文串
// 给定已给字符串，只看其中的数字和字母，忽略大小写，判断这个字符串是否为回文串？
// 输入: s = "A man, a plan, a canal: Panama"
// 输出：true
// 解释："amanaplanacanalpanama" 是回文串。
// https://leetcode.cn/problems/valid-palindrome/description/
#include <iostream>

using namespace std;
class Solution {
public:
    bool isPalindrome(string s) {
        size_t i = 0, j = s.size() -1;
        while(i < j)
        {
            if(!isalnum(s[i])){ // 跳过非数字字母字符
                i++;
                continue;
            }
            if(!isalnum(s[j])) {    // 跳过非数字字母字符
                j--;
                continue;
            }
            if(tolower(s[i]) != tolower(s[j]))  // 忽略字母的大小写
                return false;
            i++;j--;
        }
        return true;
    }
};

int main()
{
    string s1("A man, a plan, a canal: Panama");
    cout << "\""<< s1 <<"\" : " << boolalpha << Solution().isPalindrome(s1)<<endl;

    string s2("race a car");
    cout << "\""<< s2 <<"\" : " << boolalpha << Solution().isPalindrome(s2)<<endl;

    string s3("  ");
    cout << "\""<< s3 <<"\" : " << boolalpha << Solution().isPalindrome(s3)<<endl;
}